package fi.lappalainen.geoapp.utils;

import java.util.Enumeration;
import java.util.Vector;

/**
 * CacheList sisältää GeoCache oliot.
 * CacheList laajentaa Vector luokkaa kätköjen hakutoiminnoilla.
 * @see Vector
 * @author mika.j.lappalainen@gmail.com
 * @version 1.0
 * @since 1.0
 */
public class CacheList extends Vector<GeoCache> {

    /**
     * Luo tyhjän CacheList-olion siten, että sisäisen taulukon koko on 10.
     * @since 1.0
     */
    public CacheList() {
        super();
    }

    /**
     * Mudostaa tyhjän CacheList-olion annetulla aloituskapasiteetillä.
     * @param initialCapacity
     * @since 1.0
     */
    public CacheList(int initialCapacity) {
        super(initialCapacity);
    }

    /**
     * Muodostaa tyhjän CacheList-olion annetulla aloituskapasiteetillä.
     * Sisäisen taulukon tullessa täyteen, kokoa kasvatetaan annetun parametrin
     * verran.
     * @param initialCapacity
     * @param capacityIncrement
     * @since 1.0
     */
    public CacheList(int initialCapacity, int capacityIncrement) {
        super(initialCapacity, capacityIncrement);
    }

    /**
     * Palauttaa parametrinä annettua id:tä vastaavan kätkön. Jos kätköä ei
     * löydy palautetaan <code>null</code>
     * @param id Etsittävän kätkön id.
     * @return Jos id:tä vastaava kätkö löytyy palautetaan kätkön olio, muutoin
     * palautetaan <code>null</code>
     * @since 1.0
     */
    public GeoCache findCacheById(String id) {
        Enumeration e = elements();
        while (e.hasMoreElements()) {
            GeoCache find = (GeoCache)e.nextElement();
            if(id.equalsIgnoreCase(find.getId())){
                return find;
            }
        }
        return null;
    }

    /**
     * Palauttaa parametrinä annettua nimeä vastaavan kätkön. Jos kätköä ei
     * löydy palautetaan <code>null</code>
     * @param name Etsittävän kätkön nimi.
     * @return Jos nimeä vastaava kätkö löytyy palautetaan kätkön olio, muutoin
     * palautetaan <code>null</code>
     * @since 1.0
     */
    public GeoCache findCacheByName(String name) {
        Enumeration e = elements();
        while (e.hasMoreElements()) {
            GeoCache find = (GeoCache)e.nextElement();
            if(name.equalsIgnoreCase(find.getName())){
                return find;
            }
        }
        return null;
    }

    /**
     * Listaa kätköjen nimet ja ID:t
     * @return Merkkijonotaulukko, jossa vektorin sisältämien kätköjen ID:t ja
     * nimet
     * @since 1.0
     */
    public String[][] listNamesAndIds() {
        String[][] retval = new String[this.size()][2];
        Enumeration e = this.elements();
        for (int idx = 0; idx < this.size(); idx++) {
            GeoCache cache = (GeoCache) this.elementAt(idx);
            retval[idx][0] = cache.getId();
            retval[idx][1] = cache.getName();
        }
        return retval;
    }
}
